/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.muni.fi.rum.sender.command.history;

import cz.muni.fi.rum.sender.command.RapMessage;
import cz.muni.fi.rum.sender.command.RapRequest;
import cz.muni.fi.rum.sender.command.RapResponse;
import java.util.List;
import java.util.Set;

/**
 *
 * @author pmikulasek
 */
public interface CommandHistoryManager {

    /**
     * Metoda vrati seznam jiz vykonanych requstu.
     *
     * @return
     */
    public Set<RapRequest> getAllRequest();

    /**
     * Metoda vrati seznam cele komunikace ktera probehla se serverem serazene podle historie.
     * 
     * @return
     */
    public List<RapMessage> getAllHistory();

    /**
     * Metoda prida dvojici request/response do historie jiz vykonanych prikazu a svaze je dohromady, takze jde pak prohledat historii komunikace dopodrobna.
     * @param request
     * @param response
     */
    public void add(RapRequest request, RapResponse response);

    /**
     * Specialni metoda. Vrati {@link RapResponse} odpoved, ktera byla vracena pro prislusny {@link RapRequest}.
     * Tato odpoved je ziskana podle requestu zadaneho pomoci <code>requestId</code>.
     *
     * @param requestId Identifikacni cislo <code>RapRequestu</code>
     * @return <code>RapResponse</code> ktera je odpovedi na <code>RapRequestu</code>.
     */
    public RapResponse getResponseByRequestId(Long requestId) throws Exception;

    /**
     * Specialni metoda. Vrati {@link RapResponse} odpoved, ktera byla vracena pro prislusny {@link RapRequest}.
     * Tato odpoved je ziskana podle requestu.
     *
     * @param requestId Identifikacni cislo <code>RapRequestu</code>
     * @return <code>RapResponse</code> ktera je odpovedi na <code>RapRequestu</code>.
     */
    public RapResponse getResponseByRequest(RapRequest request) throws Exception;
}
